package model

type SystemObjectStatus int

const (
	SystemObjectStatusUploading = SystemObjectStatus(1) // 上传中
	SystemObjectStatusUploaded  = SystemObjectStatus(2) // 上传完成
	SystemObjectStatusFailed    = SystemObjectStatus(3) // 上传失败
	SystemObjectStatusPreDelete = SystemObjectStatus(4) // 预删除，此状态表明记录已经不可用，但存储桶中的文件尚未被删除
	SystemObjectStatusDeleted   = SystemObjectStatus(5) // 已删除，此状态表明记录已经不可用，且存储桶中的文件也已经删除
)

//go:generate go run ../cmd/generate dao --table system_objects

type SystemObject struct {
	Model

	Provider         *string             `gorm:"type:string;size:32;not null"`             // 对象提供商
	Bucket           *string             `gorm:"type:string;size:255;not null"`            // 对象桶
	OriginalFilename *string             `gorm:"type:string;size:255;not null"`            // 对象原始文件名
	Filepath         *string             `gorm:"type:string;size:255;not null"`            // 对象路径
	MimeType         *string             `gorm:"type:string;size:255;not null"`            // 对象类型
	Ext              *string             `gorm:"type:string;size:32;not null"`             // 对象扩展名
	Md5              *string             `gorm:"type:string;size:32;not null"`             // 对象MD5哈希值
	Sha1             *string             `gorm:"type:string;size:40;not null"`             // 对象SHA-1哈希值
	Sha256           *string             `gorm:"type:string;size:64;not null"`             // 对象SHA-256哈希值
	Size             *int64              `gorm:"type:uint;not null;default:0"`             // 对象大小，单位：字节
	ReferCnt         *int64              `gorm:"type:int;not null;default:0"`              // 对象引用量，允许为负
	Status           *SystemObjectStatus `gorm:"type:uint;not null;default:1"`             // 对象状态
	Progress         *int64              `gorm:"type:uint;not null;default:0"`             // 上传进度，单位：字节
	FailedReason     *string             `gorm:"type:string;size:512;not null;default:''"` // 上传失败原因
	PlanDeleteTime   *int64              `gorm:"type:uint;not null;default:0"`             // 计划删除时间
}

func (cls *SystemObject) TableName() string {
	return "system_objects"
}
